/*
 * =====================================================================================
 *
 *       Filename:  traversal-and-save.cpp
 *
 *    Description:
 *
 *        Version:  1.0
 *        Created:  2017年04月14日 11时48分54秒
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  Crane (), wanghe@galaxyeye-tech.com
 *   Organization:  Galaxy-eye
 *
 * =====================================================================================
 */



VectorPaths  g_saver;       // 保存所有路径的存储器

getAllPath(Node root)       // 这个函数供外部调用
{
    Path  emptyPath;         // 空路径
    traversal_and_save(root, emptyPath);     // 具体的内部实现
}


// 参数: 要访问的节点, 和节点之前已经形成的路径.
traversal_and_save(Node currentNode, Path partPath)
{
    // 叶子节点处理
    if( isLeaf (root) )
    {
        partPath.append(currentNode);        // partPath 变成了一条完整路径
        g_saver.push(partPath);              // 将完整路径保存到g_saver中
    }

    // 非叶子节点: 循环递归处理子节点: 由子节点继续将没有走完的partPath 完
    for(child in  currentNode.chidren)
    {
        Path  lf_partPath = partPath;

        lf_partPath.append(child);          // 在走过的路径中添加子节点
        traversal_and_save(child, lf_partPath);     //
    }
}
